home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World Komputer 2010 April
/
PCWorld0410.iso
/
pluginy Firefox
/
1191
/
1191.xpi
/
chrome
/
reminderfox.jar
/
content
/
reminderfox
/
mail
/
addContact2Reminder.js
next >
Wrap
Text File
|
2009-12-02
|
22KB
|
655 lines
// ++ IMPORTANT NOTICE --
//
// +++++++ This file is UTF-8.
// +++++++ Please adjust you text editor prior to saving any changes!
//
// ++ IMPORTANT NOTICE --
//https://developer.mozilla.org/en/nsIAbCard%2f%2fThunderbird3
/**
* add a Reminder for a selected 'Contact' of the TB / ADDRESSBOOK
*
* //gW - Guenter Wahl ... vers. 01. August 2007 15:03
The ABcard items added to the output (reminder.notes) are
configured with a 'rmFx_cardItems'-string
which is read from/written to the 'rmFx.abCardItems' TB-prefs.
Valid items are all addressbook/card items, but only the following
have a 'locale' entry. For the others their item name is displayed.
- LabelContact
- DisplayName
- NickName
- PrimaryEmail
- SecondEmail
- ScreenName
- LabelHome
- HomeAddress
- LabelWork
- WorkAddress
- LabelPhone
- CellularNumber
- FaxNumber
- PagerNumber
- LabelOther
- Costom1 .. 4
'rmFx_cardItems'-string interpretation:
!item generates 'nameString' tab 'dataOfNameString'
item generates 'dataOfNameString' only
item,[!]item items separated with comma are generated as
data output on same line separated by space
; delimiter for generating a CR for the output
// an entry beginning with // is treated as comment
which is not written to the output
- Items containing a substring of 'Label' are interpreted as header lines.
- Items with a leading 'X' are skipped for output.
This is a easy way to skip them, but hold them at the
standard place in the default 'rmFx_cardItems'-String.
- The 'Category' items need not to be added to the
interpretation string, it's added to rmFx-field 'Categories'
- 'Custom1..4'-item labels
With the extension "MoreColsForAddressBook"
https://nic-nac-project.org/~kaosmos/morecols-en.html
installed, the 'labels' can be set individually and are
stored in the prefs.js parameters
"morecols.custom"+num+".label" (num= 1...4)
Those settings are read if xpi is installed.
*/
var rmFx_cardItemsUS = "// US version;"
+ "LabelContact;"
+ "!DisplayName;"
+ "X!LastName,XFirstName;"
+ "!PrimaryEmail,XSecondEmail;"
+ "LabelPhone;"
+ "!HomePhone,!FaxNumber;"
+ "!WorkPhone;"
+ "!CellularNumber;"
+ "LabelHome;"
+ "HomeAddress,HomeAddress2;"
+ "HomeCity,HomeState,HomeZipCode;"
+ "HomeCountry;"
+ "LabelWork;"
+ "JobTitle;"
+ "Company,Department;"
+ "WorkAddress,WorkAddress2;"
+ "WorkCity,WorkState,WorkZipCode;"
+ "WorkCountry;"
+ "LabelOther;"
+ "!Custom1,!Custom2;"
+ "!Custom3;!Custom4;"
// + "!AnniversaryYear,AnniversaryMonth,AnniversaryDay;"
+ "X!BirthYear,XBirthMonth,XBirthDay;"
; // semikolon terminates 'rmFx_cardItems' !
var rmFx_cardItemsEU = "// European version;"
+ "LabelContact;"
+ "!DisplayName;"
+ "!LastName,FirstName;"
+ "!PrimaryEmail,SecondEmail;"
+ "LabelPhone;"
+ "!HomePhone,!FaxNumber;"
+ "!WorkPhone;"
+ "!CellularNumber;"
+ "LabelHome;"
+ "!HomeAddress,HomeAddress2;"
+ "!HomeZipCode,HomeCity;"
+ "!HomeCountry,!HomeState;"
+ "LabelWork;"
+ "JobTitle;"
+ "!Company,Department;"
+ "!WorkAddress,WorkAddress2;"
+ "!WorkCity,WorkZipCode;"
+ "!WorkCountry,!WorkState;"
+ "LabelOther;"
+ "!Custom1,!Custom2;"
+ "!Custom3;!Custom4;"
// + "!AnniversaryYear,AnniversaryMonth,AnniversaryDay;"
+ "X!BirthYear,XBirthMonth,XBirthDay;"
; // semikolon terminates 'rmFx_cardItems' !
var rmFx_cardItems; // this contain the active cardItem set
var rmFx_ABprop = "rf.contacts.";
var rmFx_ABerrMsg = "addContact2Reminder Error!\nConfiguration item not valid: ";
var rmFx_ABerrMsg2 = "addContact2Reminder Error!\nItem naming not valid for: ";
var rmFx_personalABURI = 'moz-abmdbdirectory://abook.mab';
var rmFx_collectedAABURI = 'moz-abmdbdirectory://history.mab';
var rmFx_selectedABURI = null;
var rmFx_cDirectory = '';
var rmFx_cCard;
var rmFx_ABbundle = document.getElementById("bundle_addressBook");
/*
*
* /messenger/addressbook/abCardOverlay.js/
*
* function AbEditSelectedCard()
{
AbEditCard(GetSelectedCard());
}
--> goEditCardDialog(GetSelectedDirectory(), card);
ondialogaccept="return EditCardOKButton();">
siehe
* function InitEditCard()
* --> gEditCard
*
*
*
*/
function reminderFox_addReminder4Contact(op){
// --- get the Contact info
rmFx_selectedABURI = GetSelectedDirectory();
rmFx_cDirectory = GetDirectoryFromURI(rmFx_selectedABURI).dirName;
if (rmFx_cDirectory.isMailList) { return;} // terminate if on 'List'
switch (op) {
case "Reminder": { // this is to set a reminder from a selected card
var rmFx_cCard = GetSelectedCard();
// --- setup the reminder -----
var time = new Date();
//time.getTime();
var timeString = reminderFox_mail_getTimeString( time );
var dateVariableString;
try { dateVariableString = reminderFox_getUnicodePref(REMINDER_FOX_PREF + "." + REMINDER_FOX_LIST_DATE_LABEL);
} catch(e) {}
var remFoxDate =reminderFox_getDateVariable( null, time, dateVariableString ) + " " + timeString;
var newDate = new Date();
newDate.setDate( newDate.getDate() + 1 ); // default to using tomorrow's date for reminder
var reminderId = reminderFox_generateUniqueReminderId( newDate );
if (gRmFx_AB3) { // if TB/AB3 then add an "UUID" element to the card
// alert ("we are in reminderFox_addReminder4Contact ... ")
// rmFx_cCard.setProperty("UUID", reminderId);
}
var remFoxSummary = "[" + rmFx_itemName ("LabelContact") + "] "
+ rmFx_cCardItem(rmFx_cCard, "DisplayName");
var newReminderToBeAdded = new ReminderFoxEvent( reminderId, newDate, remFoxSummary );
newReminderToBeAdded.extraInfo = "X-REMINDERFOX-CONTACT:"
+ rmFx_selectedABURI + "::" + rmFx_cDirectory
+ "::" + rmFx_cCard.displayName;
var cNotes = "";
var custItems ="";
var labelStr = "";
// +++++ read all card-items to be added +++++
var rmFx_cardItems = rmFx_readABcardPref(); /* -- get values -- */
var cardItems = rmFx_cardItems.split(";");
for (var i=0;i<cardItems.length;i++) {
var anyValue = false;
var currentLine = cardItems[i];
if (cardItems[i].indexOf( "Label" ) != -1 ) {
if (cardItems[i].charAt(0) != "X") {
labelStr = "";
if ( cNotes.length > 0 ) { // don't add newline for first entry
labelStr += "\n";
}
labelStr += rmFx_itemName (cardItems[i]) + ":\n";
}
} else {
if ((currentLine != "")
&& (currentLine.substring(0,2) != "//")) {
var usAdr= false;
if ( currentLine.indexOf("WorkCity,WorkState") != -1 ||
currentLine.indexOf("HomeCity,HomeState") != -1
) usAdr = true;
var cItems = currentLine.split(",");
for (var j=0; j<cItems.length; j++) { /* one item */
var namString = cItems[j];
// process cardItem
if (namString.charAt(0) == "!") {
// this needs to fetch the namString
var iName = namString.substring(1);
} else {iName = namString;}
if (iName == "HomeWebPage") iName ="WebPage1";
if (iName == "WorkWebPage") iName ="WebPage2";
var iname = iName.substring(0,1).toLowerCase() + iName.substring(1);
if (iname.charAt(0) != "x") {
var thisItem = rmFx_cCardItem(rmFx_cCard, iName);
if (iName.indexOf("Custom") != -1) {
if ( thisItem != -1 && thisItem != "") {
cNotes += labelStr + " " + rmFx_itemName(iName) + " : "
+ thisItem + "; "
anyValue = true;
labelStr = "";
}
} else {
if (namString.charAt(0) == "!") {
if ( thisItem != -1 && thisItem != "") {
cNotes += labelStr + " " + rmFx_itemName(iName) + ":\t";
anyValue = true;
labelStr = "";
}
}
if ( thisItem != -1 && thisItem != "") {
if (labelStr != "" && thisItem != "") {
cNotes += labelStr;
labelStr = "";
}
if (anyValue == false) cNotes += " ";
cNotes += thisItem ;
if (usAdr == false) { cNotes += " ";}
else { cNotes += ", ";
} usAdr = false;
anyValue = true;
}
}
}
}
}
if (anyValue == true) cNotes += "\n";
}
}
cNotes += '\n[' + rmFx_cDirectory + ']'; // add from where we got the address from
newReminderToBeAdded.notes = cNotes;
if (custItems != "") newReminderToBeAdded.notes += "\n" + custItems + "\n";
// --- add ABcard-items to rmFx-fields ---
// add address to 'Location' for search with Google Maps
var workAddr ="";
var w = rmFx_cCardItem(rmFx_cCard, "WorkAddress"); if (w != "") workAddr += w + " ";
var w = rmFx_cCardItem(rmFx_cCard, "WorkAddress2"); if (w != "") workAddr += w + " ";
var w = rmFx_cCardItem(rmFx_cCard, "WorkCity"); if (w != "") workAddr += w + " ";
var w = rmFx_cCardItem(rmFx_cCard, "WorkAddress"); if (w != "") workAddr += w + " ";
var w = rmFx_cCardItem(rmFx_cCard, "WorkState"); if (w != "") workAddr += w + " ";
var w = rmFx_cCardItem(rmFx_cCard, "WorkZipCode"); if (w != "") workAddr += w + " ";
var w = rmFx_cCardItem(rmFx_cCard, "WorkCountry"); if (w != "") workAddr += w + " ";
var locAddr ="";
var w = rmFx_cCardItem(rmFx_cCard, "HomeAddress"); if (w != "") locAddr += w + " ";
var w = rmFx_cCardItem(rmFx_cCard, "HomeAddress2"); if (w != "") locAddr += w + " ";
var w = rmFx_cCardItem(rmFx_cCard, "HomeCity"); if (w != "") locAddr += w + " ";
var w = rmFx_cCardItem(rmFx_cCard, "HomeState"); if (w != "") locAddr += w + " ";
var w = rmFx_cCardItem(rmFx_cCard, "HomeZipCode"); if (w != "") locAddr += w + " ";
var w = rmFx_cCardItem(rmFx_cCard, "HomeCountry"); if (w != "") locAddr += w + " ";
if (locAddr == null || locAddr == "") locAddr = workAddr;
// .location does NOT accept local chars like Ö in 'KÖLN' ==> so normalize the string
newReminderToBeAdded.location = rmFx_normalizeNameString(locAddr);
var cItem = rmFx_cCard.primaryEmail;
if (cItem != "") newReminderToBeAdded.url = "mailto" + ":" + cItem ;
cItem = rmFx_cCardItem(rmFx_cCard, "Category");
if (cItem != "") newReminderToBeAdded.categories = rmFx_cCard.category;
/* if (rmFx_cCard["birthYear"] != "") {
newReminderToBeAdded.summary += ' <' + rmFx_cCard["birthYear"] + '>';
}
*/
rmFx_writeABcardPref();
// .... and go to display it ....
var added = reminderFox_addReminderHeadlessly( newReminderToBeAdded );
}
case "Copy": { // copy mailadr of selected cards to clipboard
// with mailName <mailadr@xxx.yy>, etc
var rmFx_Cards = GetSelectedAbCards();
var xAttendees="";
for (var n=0; n < rmFx_Cards.length; n++) {
xAttendees += rmFx_Cards[n].lastName + rmFx_Cards[n].firstName
+ "<" + rmFx_Cards[n].primaryEmail + ">,";
}
// del last comma
xAttendees = xAttendees.substring(0, xAttendees.length-1)
rmFx_abookMini();
rmFxUtil.copytoClipboard(xAttendees);
rmFx_insertAttendees(xAttendees);
return;
}
} // switch
}
function rmFx_cCardItem(rmFx_cCard,iName) {
// ---------------- get item Value or set to -1 if invalid "
try {
if(!gRmFx_AB3) {
iName = iName.substring(0,1).toLowerCase() + iName.substring(1);
!rmFx_cCard[iName].length;
return rmFx_cCard[iName];
} else {
var iValue = rmFx_cCard.getProperty(iName, "");
return iValue;
}
} catch(ex) {
alert( rmFx_ABerrMsg + "\n1: " + iName);
reminderFox_logMessageLevel(rmFx_ABerrMsg + iName, 2);
return -1;
}
}
function rmFx_itemName (namItem) {
/* ---------- access the properties ... if relevant -------------
*/
try {
// .... access 'address.properties'
if ( namItem == "DisplayName" ||
namItem == "NickName" ||
namItem == "PrimaryEmail"||
namItem == "SecondEmail" ||
namItem == "ScreenName" )
return rmFx_ABbundle.getString("property"+namItem);
if ( namItem == "LabelContact" || namItem == "HomeAddress" )
return reminderFox_getBundle().getString(rmFx_ABprop+namItem);
if ( namItem.indexOf("Label") != -1)
return rmFx_ABbundle.getString("heading"+ namItem.substring(5));
if ( namItem.indexOf("Number") != -1)
return rmFx_ABbundle.getString("property"+ namItem.substring(0,namItem.indexOf("N")));
// ... access morecols.properties ... if there else addressbook.p
if ( namItem.indexOf("Custom") != -1)
return rmFx_getCustomLabel (namItem);
// ... now no entries ... need to set it here (without 'locale' translation)
if ( namItem.indexOf("Name") != -1 ) return namItem;
if ( namItem == "JobTitle" ) return "Job";
if ( namItem == "Department" ) return "Department";
if ( namItem == "Company" ) return "Company";
if ( namItem == "HomeWebPage" ||
namItem == "WorkWebPage" ) return "WebPage";
if ( namItem.indexOf("Address2") != -1) return "";
// ... delete 'Phone' from item-name and return it
if ( namItem.indexOf("Phone") != -1)
return namItem.substring(0,4);
// ... delete 'Work' or 'Home' from item-name and return it
if ( (namItem.indexOf("Work") != -1)
|| (namItem.indexOf("Home") != -1) )
return namItem.substring(4);
}
catch(ex) {
// alert( rmFx_ABerrMsg2 + "\n2: " + namItem);
reminderFox_logMessageLevel(rmFx_ABerrMsg2 + namItem, 2);
}
return namItem;
}
function rmFx_getCustomLabel (iName) {
// ---------- work with Custom 1..4 individual entries -------------
var cLabel="";
var moreColsPrefs = Components.classes["@mozilla.org/preferences-service;1"]
.getService(Components.interfaces.nsIPrefBranch);
var cLabelid = "morecols."
+ iName.substring(0,1).toLowerCase() + iName.substring(1)+".label";
try {
cLabel = moreColsPrefs.getComplexValue
(cLabelid, Components.interfaces.nsISupportsString).data;
} catch(e) {
cLabel = "Custom " + iName.substring(6,7);
}
return cLabel;
}
function rmFx_readABcardPref() {
// ------------------------------------------------ READ PREFS
var prefService = Components.classes["@mozilla.org/preferences-service;1"]
.getService(Components.interfaces.nsIPrefBranch);
var abCardPrefVersion = "US";
try { abCardPrefVersion = prefService.getCharPref
("rmFx.abCardItems.version");
} catch(e) {}
prefService.setCharPref("rmFx.abCardItems.version", abCardPrefVersion);
try { rmFx_cardItems = prefService.getComplexValue
("rmFx.abCardItems", Components.interfaces.nsISupportsString).data;
} catch(e) {
if (abCardPrefVersion == "US") {
rmFx_cardItems = rmFx_cardItemsUS; // set to US default
prefService.setCharPref("rmFx.abCardItems.version", "US");
}
if (abCardPrefVersion == "EU") {
rmFx_cardItems = rmFx_cardItemsEU; // set to EU default
prefService.setCharPref("rmFx.abCardItems.version", "EU");
}
}
return rmFx_cardItems;
}
function rmFx_writeABcardPref() {
// ------------------------------------------------ WRITE PREFS
var prefService = Components.classes["@mozilla.org/preferences-service;1"]
.getService(Components.interfaces.nsIPrefBranch);
var abCardPrefVersion = "US";
try { abCardPrefVersion = prefService.getCharPref
("rmFx.abCardItems.version");
} catch(e) {
prefService.setCharPref("rmFx.abCardItems.version", abCardPrefVersion);
}
prefService.setCharPref("rmFx.abCardItems", rmFx_cardItems);
}
/**
* From the reminderlist open the associated TB/AB card
<br> * This requires the contact was added before from the TB/AB card or list selection
<br> * The reminder has these paramters to define the card:
<br> reminder.url {mail address} foo@nowhere.moc
<br> reminder.extraInfo with 'X-REMINDERFOX-CONTACT:{directory}::{AB title}::{DisplayName})'
<br> @todo REWORK: with getting a UUID for the card/contact;
see bug https://bugzilla.mozilla.org/show_bug.cgi?id=444093
* @param event -- the selected reminder or todo (only one allowed!)
* @return opens the TB/AB card
*/
function rmFxOpenABcard(event) {
//------------------------------------------------------------------------------
var selectedEvents;
if (event.currentTarget.id == "treechildren-contextmenu-reminder-openABcard") {
selectedEvents = getAllSelectedReminders(); // from 'reminder list' context menu
}
if (event.currentTarget.id == "treechildren-contextmenu-todo-openABcard") {
selectedEvents = getAllSelectedTodos(); // from 'reminder list' context menu
}
if (selectedEvents.length != 1) {
rmFxUtil.PromptAlert("Call TB/AB card only supports one card selection!") //$$$locale
return;
}
/*----
let allAddressBooks = abManager.directories;
while (allAddressBooks.hasMoreElements()) {
let addressBook = allAddressBooks.getNext();
if (addressBook instanceof Components.interfaces.nsIAbDirectory) {
rmFxUtil.dump2Console("AB : " + abManager.getDirectory(addressBook.URI).URI
+ " " + abManager.getDirectory(addressBook.URI).dirName);
//reminderFox: AB : moz-abmdbdirectory://abook.mab
//reminderFox: AB : moz-abmdbdirectory://abook-1.mab
//reminderFox: AB : moz-abmdbdirectory://history.mab
}
}
--------- */
// X-REMINDERFOX-CONTACT:moz-abmdbdirectory://abook.mab::Personal Address Book::Werner Niggemann\\nDTSTAMP:20090722T114039
var abManager =
Components.classes["@mozilla.org/abmanager;1"].
getService(Components.interfaces.nsIAbManager);
var exPos = selectedEvents[0].extraInfo.indexOf("X-REMINDERFOX-CONTACT:");
if (exPos != -1) {
var contactInfo = selectedEvents[0].extraInfo.substring(22);
var contactStr = contactInfo.split("\\n")[0];
var contactDetails = contactStr.split("::");
var abURI = contactDetails[0];
if (selectedEvents[0].url != null) {
var thisMailAdr = selectedEvents[0].url.substring(7);
var thisCard = abManager.getDirectory(abURI)
.cardForEmailAddress(thisMailAdr);
} else {
// search for element as stored with "DisplayName"
var thisCard = abManager.getDirectory(abURI)
.getCardFromProperty("DisplayName", contactDetails[2], false);
}
if (thisCard != null)
window.openDialog("chrome://messenger/content/addressbook/abEditCardDialog.xul",
"",
"chrome,resizable=no,modal,titlebar,centerscreen",
{abURI:abURI, card:thisCard});
}
}
/**
* imported from "Duplicate Contact Manager" by Marian Steinbach, 2006
* normalizeNameString
<br>
* Strips some characters from a name so that different spellings (e.g. with and
* without accents, can be compared. Works case insensitive.
*
* @param String the string to be normalized
* @return String normalized version of the string
*/
function rmFx_normalizeNameString(str) {
//------------------------------------------------------------------------------
// remove punctiation
//str = str.replace(/[\"\-\_\'\.\:\,\;\&\+]+/g, '');
// replace funny letters
str = str.replace(/[ÊÉÈËèéêëĒēĔĕĖėĘęĚě]/g, 'e');
str = str.replace(/[ÂÁÀÃÅâáàãåĀāĂ㥹Ǻǻ]/g, 'a');
str = str.replace(/[ÌÍÎÏìíîïĨĩĪīĬĭĮįİı]/g, 'i');
str = str.replace(/[ÕØÒÓÔòóôõøŌōŎŏŐőǾǿ]/g, 'o');
str = str.replace(/[ÙÚÛùúûŨũŪūŬŭŮůŰűŲųơƯư]/g, 'u');
str = str.replace(/[ÝýÿŶŷŸ]/g, 'y');
str = str.replace(/[ÇçĆćĈĉĊċČč]/g, 'c');
str = str.replace(/[ÐðĎĐđ]/g, 'd');
str = str.replace(/[ĜĝĞğĠġĢģ]/g, 'g');
str = str.replace(/[ĤĥĦħ]/g, 'h');
str = str.replace(/[Ĵĵ]/g, 'j');
str = str.replace(/[Ķķĸ]/g, 'k');
str = str.replace(/[ĹĺĻļĿŀŁł]/g, 'l');
str = str.replace(/[ÑñŃńŅņŇňʼnŊŋ]/g, 'n');
str = str.replace(/[ŔŕŖŗŘř]/g, 'r');
str = str.replace(/[ŚśŜŝŞşŠš]/g, 's');
str = str.replace(/[ŢţŤťŦŧ]/g, 't');
str = str.replace(/[Ŵŵ]/g, 'w');
str = str.replace(/[ŹźŻżŽž]/g, 'z');
// replace ligatures
str = str.replace(/[ÄÆäæǼǽ]/g, 'ae');
str = str.replace(/[ÖöŒœ]/g, 'oe');
str = str.replace(/[Üü]/g, 'ue');
str = str.replace(/[ß]/g, 'ss');
str = str.replace(/[IJij]/g, 'ij');
// remove single letters (like initials)
/* str = str.replace(/ [A-Za-z0-9] /g, ' ');
str = str.replace(/^[A-Za-z0-9] /g, '');
str = str.replace(/ [A-Za-z0-9]$/g, '');
*/
// remove multiple white spaces
str = str.replace(/[\s]{2,}/, ' ');
// remove leading and trailing space
str = str.replace(/[\s]{2,}/g, ' ');
str = str.replace(/^[\s]+/, '');
str = str.replace(/[\s]+$/, '');
str = str.toLowerCase();
return str;
}